{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "#load data from file导入txt数据\n",
    "def load_data(filename):\n",
    "    dataset = []\n",
    "    label = []\n",
    "    file = open(filename)\n",
    "    for line in file.readlines():\n",
    "        lineArr = line.strip().split('\\t')\n",
    "        dataset.append(lineArr[0:2])\n",
    "        label.append(lineArr[-1])    \n",
    "    return np.array(dataset,dtype=np.float64),\\\n",
    "           np.array(label,dtype=np.float64).reshape(-1,1)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(200L, 2L) (200L, 1L)\n[ 1.        0.067732] [ 3.176513]\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYwAAAEKCAYAAAAB0GKPAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztnX9wHeV577/PkR0MFGzFcm0CuKRNem9oxjqxZMl2Awbu\nNJgEO9NpZpqfndtpxiXFOseW07S5LZZEO7ftpJYsGVpKuZnbTkqZTCDF0ECaTINNA5aRQCKhuU0J\nSRoMxpbxD0hIQOc894/nvOy7e/ZIe6SzRz/O9zOzo7O77+6+G5P32ee3qCoIIYSQ6cjM9QQIIYQs\nDCgwCCGEJIICgxBCSCIoMAghhCSCAoMQQkgiKDAIIYQkggKDEEJIIigwCCGEJIICgxBCSCKWzPUE\naklLS4teccUVcz0NQghZMIyOjk6o6qokY1MXGCLSBGAEwDFVvTFy7vcBfMyby7sArFLVl0XkBwBe\nAVAAMKmq7dM964orrsDIyEgtp08IIYsaEflh0rH10DDyAL4D4OLoCVX9HIDPAYCIbAOwW1Vf9oZc\nq6oTdZgjIYSQaUjVhyEilwH4AIC7Egz/CIB/THM+hBBCZk7aTu/9AD4DoDjVIBG5AMBWAPd6hxXA\n10VkVER2pDdFQgghSUhNYIjIjQBOqOpoguHbAHwzYo56r6pmAdwA4GYRubrCc3aIyIiIjJw8eXL2\nEyeEEBJLmhrGrwLYXnJe3wPgOhH5QoWxH0bEHKWqx0p/TwD4MoCOuAtV9U5VbVfV9lWrEjn6CSGE\nzIDUBIaqflZVL1PVK2AC4V9V9ePRcSKyHMAWAPd7xy4UkYvcbwDvA/DttOZKCCFkeuqehyEiNwGA\nqt5ROvTrAP5FVX/sDVsN4MsiAtgc71bVh+s6UUIImSmqgK1f8fsLFFlMLVrb29uVeRiEkDmltxc4\ncwYYGDAhoQrs3g2sWGHn5hkiMpokzw1gaRBCCKkdqiYsBgdNSDhhMThoxxf4B/qiKg1CCCFziohp\nFoAJicFB+53PBxrHAoYmKUIIqTWqQMYz4BSL1QmLOvpAaJIihJB6Ef3oLhTMDOXjzFNJ6O0Nj3dm\nrXng/6DAIISQmeIv7qrA3r3AmjVmisrlTHhks2GfxlTMcx8IfRiEEBJlKpOQ++0v7keOAB0dwKOP\nAhMTwMqVZobavBkYGwNaW4Hly6d/DmC+DtWwDySXC3wj012fIhQYhBDiM1VYLBA+198PHDoEDA/b\nBgCrVwMvvQTcdpvtd3UFi7ofXrt3L3DuXHCvQgHYsycQMFGuvda0lTkM16XAIIQQh681ACYQursD\nExMADA3Z34GBQIPweeml8P7hw8D4uJmqjh+3iKktW4B//3fTRgBg3z47PzFhQsE9wzE0FJi23LOd\nqSqfr5+moaqLZmtra1NCCJkVxaJqPu+8Erbl86qFgmpXl2pnZ/hcNVtXl+rkpGo2a/srV4bPt7So\n3nxz/LU7d6rmcuXzKhZn9boARjThGkunNyGE+DhTk09/v2kTBw6Yr2I2985kgNFRMzudOhU+f/w4\n0NISaDOOjg7giSfK/RjLl9fVh0GBQQghPqpmhvJpagp8FI8+Gj7X0hLeX7cOuOCC+HsPDQG7dtki\nv2VL+fk9e8y3EeX11+35bW3h4wcPmnO9TlBgEEKIww9jdWGxPi0tYZ9FS0vgh3CIAD/5Sfm9nSN7\naMi0jKifoqXFntvWZufyeRMG+bw9M/rsbNb2u7vrFm5LgUEIIQ4Rizrq7LT9aAJeVDi4/Y4OEy65\nnDm44zjvPIuY8lm5EvjjPw4ET0sLcNFFJgycuWlgwITGlVeGrx0dteMrVtTNLEWBQQghPj09JjCG\nhmzL5cp9Co41a4CdOy0PI5OxxX31ajvnNBT/2ujC/tGPWmitExZXXgmsX2+aw9mzgebQ3w+85z3h\na7u77XgdM8AZVksIIT5Oy3BhsM50FGd+On48XDMqkwF+93ctNHf/frvX/v228B89GpiaBgbMl+EL\npKEhC8E9fDgY09cHnD5t93ZjAfNn+CG2ddIwWHyQEEJ8fD9GlKjQyGaB7dttYY/eI5op3tcXJP35\ngqC5GbjlFmCJ9/1eKNj1l18OHDtmGo8zkw0NAZdeCvzGb9i1PT2zEhjVFB+khkEIIT5+Bnecg9t9\n/TuhsmVLuYCILuAiZjpyH+hnzgQag6ppMz5tbcC2bfbMY8fCmeRuLv39ptHUMdubAoMQQnxcWG00\ng9tlYff3h/teVON0duP8nhmOlhbgxReBDRuCZz/xhO1HHelXXx0Iizpme1NgEEKIj4hFKLmwVYcz\nPzmfhRMaM1mk3bW+wJiYAJYuDZ61bRvw6U9bdJVPS4slEB44EIytUwIfo6QIIcRH1SKUxsbKcyH8\nyCVg5ou085NUYmTEnjU0ZM5yn6jjPW5eKUGBQQghPi5Kym+r6nIhapHz4DvV8/mgZ4bPkiUmLM4/\n3/ZbW23cunXl9/PNZCmTusAQkSYReUpEHow5d42InBWRsdK21zu3VUT+Q0SeFZE/THuehBDyJr29\nYXOTExq1cCz7AslVwx0bs4X/llvCY9vbTVg8+WTlciJ1zPauh4aRB/CdKc4/qqrZ0nYrYEIGwO0A\nbgBwJYCPiMiVU9yDEEJqS1ykU61wAimTCYTHyIgl8fmsX28Z3ZmMPb+5ubxXxmLxYYjIZQA+AOCu\nKi/tAPCsqj6nqq8DuAfAB2s9P0IImTPcAt/ba5rGnj1hM1U+b/t79gQFzc+etYip6XwrKZF2lNR+\nAJ8BcNEUYzaLyNMAjgH4tKo+A+BSAD/yxjwPoDO1WRJCGpupWrLWA1/T8P0mQNhvkmRMiqQmMETk\nRgAnVHVURK6pMOxJAGtV9VUReT+AfwLwziqfswPADgBYu3btLGZMCGlIpmrJWsc6TW8m9kX9Jr4g\nSDImRdI0Sf0qgO0i8gOYSek6EfmCP0BVz6nqq6XfXwGwVERaYNrG5d7Qy0rHylDVO1W1XVXbV61a\nlcJrEEIWJc7M41qy7toVjmA6c6ZuZcPfJInfJE3fyjSkpmGo6mcBfBawaCiYuenj/hgRWQPgJVVV\nEemACbBTAM4AeKeIvB0mKD4M4KNpzZUQ0mD4WsXAgAkGV50WCJt9yJvUPdNbRG4CAFW9A8CHAHxK\nRCYBvAbgw6Ues5MishPAVwE0Afh8ybdBCCGzw9cqgPK2p+4YhUUZrFZLCGk8pqpICzSUhlFNtVpm\nehNCGg8/wsiRywWhqoODJlAW0Qd1LWDxQUJI4zFVLac6h6ouJCgwCCGNhW+OyuWsI57rfgfYfoOY\no6qFJilCSGPhajl1ernA+/eb8Bgetm54FBaxUGAQQhqPnh4TGENDYdPU8PDc5F8sEGiSIoQ0HiKm\nVYiYacpFSzVQdNRMYFgtIaRxiNaIKhaBpqbwfoMJC4bVEkJIlN7ecKhssQi0tYXHMJR2SigwCCGL\nj+iiXywG2d27dwfCwjUu8suJU2hUhD4MQsjiIq76bHe3NRlyQsH5LLLZoEER8y+mhRoGIWTx4NeJ\ncpqCy7k4e9YaFfk4YQHUtg3rIoUCgxCyeHCLvtMkMpmgi53rn+0T7YVNzWJKKDAIIYuLuDpRTlg4\n4cGaUTOCPgxCyOIirk6U78OYo/amiwFqGISQ2RP9Qp+rL3bfZxHVJJwPI9relD6LxFDDIITMjvnS\nExsI6kRV0iQymfLxJDEUGISQmRPXvc7/wneahr8wR7Ota01vb/gZTmhQOMwaCgxCyMxwi7L7go+r\nydTXV6597NoFNDcH2kexGP7yr4VAiV5PYVET6MMghFRPtMzGvn3h8y7fIZoTsWmTVYg9fdr2e3os\n47qnx8Y7c9ZMTVnzxZeySKHAIIRMzVRlNjZtAjZuBFavDo9529ts0Y/mRAwPh+978KCV5zh40O7r\nzFkzKTEeFWKzFT6kDAoMQkhl4hZhF6LqGg4dPQqcOgWsXGnHAOCll4D777fxcb2zh4asSqyr5TQ2\nZvvO9xHnc5hKe5gqw5v9LWoGBQYhJJ7pymxEBcGpU0Gb09ZW4IMftEW/Uu9sx+hoeD96X2B67WGq\nDG86vGuHqqa6AWgC8BSAB2POfQzA0wC+BeAxAK3euR+Ujo8BGEnyrLa2NiWE1JBiUTWXU7Ul2rZc\nTrVQUM3nw8f9bXLSrnVj8vn4ewGqq1eX3z+XU+3pCeYQvU9035+vfy//HIkl6fqqqnWJksoD+A6A\ni2POfR/AFlU9LSI3ALgTgNdoF9eq6kQd5kgIiaOvr9ycUygAmzebOSqbBU6cAF54ITymvR3Yvj3I\niYgW/duwwXwfBw6Y+QowrWTLlkBLyeWCZ8dFYuVyYe2hWCyvFbV7NzWMGpKqSUpELgPwAQB3xZ1X\n1cdU9XRp9wiAy9KcDyGkClSBhx6yRd3n9tuBH/4QaGkx34MTFi0tQEeH/XaO7FtuMX+HW8ibm4Gu\nLhMWzc3h+46PB8Kis9NaqPb1BSatOFOVw/W3YK2oVElbw9gP4DMALkow9ncAPOTtK4Cvi0gBwN+o\n6p1xF4nIDgA7AGDt2rWzmy0hJEAVeP31+HPHj9vfNWuAyy8H3njDhMTERHB82zYTFMPDQXTUwIAJ\ni6NHTaOoxOOP21/nQ4lb8IeG7PjgoD3HOdBd+Q/Wiqo9SW1X1W4AbgTwV6Xf1yDGh+GNvRZmtlrp\nHbu09PfnAYwDuHq6Z9KHQUiNcLb/vXtVs9nKvopCwcZOTpb7MJyfwfkk4q7v6lJdt678uPNNxPk9\nurri75fP23zi3oNUBFX4MNIUGH8G4HmY8/o4gJ8A+ELMuHUAvgfgl6e4Vy+AT0/3TAoMQmpAT094\nwd65s7LAcIt0JQe4f5+pHN2AamurCaioQzt6rXO6RwUZhcOMqEZgpGaSUtXPAvgsAIjINaUF/+P+\nGBFZC+A+AJ9Q1e96xy8EkFHVV0q/3wfg1rTmSggpoRo2AxWLwG23xY/NZm3coUNmDnLO7aamYIxz\ndkdDa52j29HaauG1TU2B+WnFivhrh4YCX4cPHdzpk1SyzGaDZ5ICcBOAm0q/7wJwGhY6+2b4LIBf\nhJmhxgE8A+CPkjyHGgYhNcAPW3VbS4v9XbbM/q5ZY3+zWdWrr66safjmKDemtbVcu+jqKg+PTRKW\nm8tNHWZLpgXzQcOICKVHADxS+n2Hd/yTAD4ZM/45AFN4xAghqeC+7vv7g/BVAPjUp4AHHggcy9u2\nAefOWQRUX18Q0hpthzo4aBFPLgTW3d+ntdUisTKZQENwWoLvyJ4KOrjrAqvVEkKM3l7g4YdtgY/y\nJ39if50wyGRs8XeLcyYzdR8KV1xw924Ln/UZHzehsXx5eRl0Z/ZyZik/R8Ptu2fRHJU6FBiEEFuc\nT58Oh8C2tpYv7k5YAOWL83R9KFSDe+dylmexa5ct+suWlRcJjJZOd7hr3RhqFXVDNE5FXKC0t7fr\nyMjIXE+DkIWJarCAV2K2tZl6e00w7d9fuT9G3Lz8fhnFYlgIUVjMChEZVdX2JGNZfJAQYogEX+4+\nuZyVA6lF5nRvbyAs/GdOJSyiUVL+8yks6goFBiHEcF/7cfjVYGdrAkraDc8JC5b7mDfQh0EIKTdH\n+U5ld2z//vo6lp1/opIjndpF3aHAIITY4tvcbMUDN24MTFOqVvepuXluFujpHOmkrtAkRQgJ2Lgx\nvCCLANdfP7dtTpOasEjqUGAQQoKSIENDlnDn/AdDQ9Zdj/4CApqkCGlsnLnHmXpUw02K2OKUeFDD\nIKRRifbJjoPCgnhQYBDSiPhVaZ3QiEvaY/gq8aDAIKQR8fMqBgctk9oPqWXOA4mBAoOQRsXPa3C4\nOk21TNQjiwY6vQlpVOLKbvgw54FEoIZBSCNSqezG0BBrNZGKUMMgpBFh2Q0yA1jenJBGJloenOXC\nGw6WNyeEhIl+GFYyOVFYkCmgwCBksRNN0HP+i7msD0UWJBQYhCxm4hL0nLP7zBnmV5CqSF1giEiT\niDwlIg/GnBMRGRKRZ0XkaRFZ753bKiL/UTr3h2nPk5AZU8ncMx9wzuxcLkjQGxy0/f5+mqBIVdRD\nw8gD+E6FczcAeGdp2wHgrwETMgBuL52/EsBHROTK9KdKSJUsBHNPXx9w5Ej4mCqwefP8mieZ96Qq\nMETkMgAfAHBXhSEfBPD3ahwBsEJELgHQAeBZVX1OVV8HcE9pLCHzh4Vg7lEFXn7ZmiD5HDgADA8D\np0/Pj3mSBUHaeRj7AXwGwEUVzl8K4Efe/vOlY3HHO+NuICI7YNoJ1q5dO8vpElIFfu7CVCXB5yp0\ndbrku2yWmdykKlLTMETkRgAnVHU0rWcAgKreqartqtq+atWqNB9FSDlx9Zj8RXiuTFY9PUHZj/Fx\noLW1fMzFF5tPg5CEpPlfy68C2C4iP4CZlK4TkS9ExhwDcLm3f1npWKXjhMwvisXyekxOQExnsioW\nw9fVyjTU0wMcPGjP2bULWLfOhEaUc+fK50DIVKhq6huAawA8GHP8AwAeAiAANgI4Wjq+BMBzAN4O\n4C0AxgH8ynTPaWtrU0Lqxt69qtmsiYZ8XrVQCO8Xi7blck58BOf27g3GqNrffF61p2d2c3L3AYK5\nTLXlcsEcSEMCYEQTruV110dF5CYRuam0+5WSYHgWwN8C+D0AUNVJADsBfBUWYfVFVX2m3nMlpCKq\n1ut6bMx8Af391gt7bAxoaTFzTyXfQH+/XZuGs9wPox0bqzyuqwvo7ASam+nDIImpS/FBVX0EwCOl\n33d4xxXAzRWu+QpMoBAy/4g6vJua7Hc2awv1uXOVu9h1dwP79gXX1rp/dl/f9EJHBHjsMfowSFXw\nvxZCZkqcw3t0NFkXu/b2QGg4li+fubDwneovv2xhs3F0ddlchoZMcDGkllQBBQYhMyWuAdHu3WZy\n8vG72PX3B1pIe6RA6MGDUzuh4zLKVcORWFOF7La2mglq/3520iMzgv0wCKkGtyBHGxANDACbNtmX\n+6FD4WtclrWqaR0jIyYsfB+DEyLd3fFmqd5e82+4c6r2PFVg40Z7rhMo995bPu9czgREX5/tM/+C\nzAAKDEKS4hbt/n5b+Jcvt4X+4ovtvFuwx8eBjg7g9ddNCBw9akJFxL7we3uB7dvDAmN01ASQ/9Xv\nCycXngvYYr9rl2VqA+a8dmYmR2treSitn/tBYUFmAAUGIUnwF+1Dh2yBd1FSgC3AGzcGJTj8Uhzr\n1tn+8HDQDvXs2fD9N282IdPTEzzPCZDe3viM8lzO/kad6oAJC6f5OE2IPbrJbEkaf7sQNuZhkFTx\n8yzcFs3DiOZcRPMvCoUgTyLumq6ucC5FNFfDv5/L84h7VjZr93bX1SLHgyxKUEUexrQahoh0AfiC\nqp5OX3wRMo/JZEyzcCG0gGkY7kt+OtzXveulvXx54LMAgMcft+gmF+Hkh9nGOdh37Sp3hOdyduzA\ngfC9qVmQWjCdRAHwp7DEui8C2IpSH/D5uFHDIDXHz4KOy9oG7Eu+0rmohuHud8stYe1kcrJce4lm\ngfuZ2f6zOjps3x3LZk1T6emhdkGmBbXM9FbVP4b1q/g/AP4ngP8Ukf8tIr+UlhAjZF4QDVd1SXhr\n1oTHtbWZX8I5oV2ug6OjI2hgtHu3jT13LsgSHxwEliwpz8x2YwHTSjo7A41i/37bX70a2LrV9gcG\ngmgrkaAA4Xwqt04WNImc3qqqInIcwHEAkwCaAXxJRL6mqp9Jc4KEzAnFYjgyqb8/CI89ftwEwMCA\nCYuxMWDPHuD6620R37/fwledeeitb7XF25mjMpmwE9uno8Oc5+7cI48AW7bYdR0dZmo6etTMV52d\nJqScA92ZzLq77VrnDK9VBjlpeESn+eoQkTyA3wIwAWuE9E+q+oaIZAD8p6rOG02jvb1dR0ZG5noa\nZKHjh8+6xdfhFnSXiFcomLBw0Uyq4bBYoHJfjGIx7A8BAg0hl7NoLBca6/smfOKEgWq45EexSGFB\nKiIio6raPv1IJPJh9AH4hQrn3pXU9lWPjT4MMmuiEUqFQtiv0NVVHn20d2/1z5kq4mqqKrNRP0m0\n0qw//zjfCSERUGMfRo+q/rDCuUq9uglZGMRp2AMDQc2nqAZw4EB5hdmzZ6vzD6gGlW2zWdNS8vlg\n/6JKDSpjiGvO5LLP/dpV/jhCZghrSZHGpVI3vL6+8npQhUI4US6TCZcFqcbk44fWjo4GPo18Hrjx\nRuCVVypfOzRUXsjQvYN/Xzcnd1/WjSI1gJnepDHRmHIb7us8lyvPefBzGvzM6pk6k6P+DleY0O+p\nMTERjG9pAZYuBV58MfxsICwM4u5LhzepERQYpDGJ9rOIK7eRz4cd384r4LN798wX5Og1fn2qaIjt\nxETg+PabHsU9e7p9QmbItFFSCwlGSZGqiYso6u21UuPbtwfNiFyxP1cPytdIah22WijEV7MdHbVn\nUACQGlJNlBR9GKRxcYLAZ9cuM1WNjQXObBELo926NX3/gKqF6UY1DFf6nJA5hCYp0pg4B7dzIgP2\n2++Q52sNIvXxD4jEm6Wy2dl15COkBlDDII2JH1G0f79tPi4xL+66qfZni2pQNt0PjfU1HkLmCGoY\npHFxGgMQ32rVrxRbry/7SqGxAENjyZyTmsAQkWUADgM4r/ScL6lqT2TM7wP4mDeXdwFYpaovi8gP\nALwCoABgMqlThpCq8E1TruT4wYPhGlLd3UHpj3rA0FgyT0lTw/gZgOtU9VURWQrg30TkIVU94gao\n6ucAfA4ARGQbgN2q+rJ3j2tVdQKEpEFvL/Dww7Y453LAvn1BdNKaNUG/ChcJVW9NY6p9QuaA1ARG\nqUbJq6XdpaVtKgPsRwD8Y1rzISSEKnD6dLgvtkuaA6wi7a232m9WeyUEQMpObxFpEpExACcAfE1V\nhyuMuwDWnOle77AC+LqIjIrIjimesUNERkRk5OTJk7WcPlnMOF9BNmv7Bw4EEVIbNoTHUlgQAiBl\ngaGqBVXNArgMQIeIvLvC0G0AvhkxR723dO0NAG4WkasrPONOVW1X1fZVq1bVdP5kEeNHI0V5443w\nPgv3EQKgTmG1qnoGwDdgWkQcH0bEHKWqx0p/TwD4MoCONOdIGgjni+jvDzQMH9ePgtVeCQmRZpTU\nKgBvqOoZETkfwK8B+IuYccsBbAHwce/YhQAyqvpK6ff7ANya1lxJA+E3R9q9O17DAALhwJBWQt4k\nzSipSwD8nYg0wTSZL6rqgyJyEwCo6h2lcb8O4F9U9cfetasBfFns/6BLANytqg+nOFfSCEQr1C5f\nDlxwAfCTnwRjslmrCvvWt05d4I+QBoTFB0nj4Cfp+W1XXWE/F0Kby1XO9CZkkcHig4REcc2SgMDM\n5Ig2MfLLhxNC3oSlQcjixzdFxWnUu3cHGgXNT4RUhAKDLF5cNJQTBMViuFueX6WWwoKQaaHAIIsT\nFw0VLVHu4yrUuiQ+CgtCpoQCg9SeaM2letZgcs+L9uvetSusXQBBRVpqFoQkgk5vUlucc9n5Clw1\n2HpVegXC3fAGB82h7TdGiibkEUISQYFBaoNq+Mt+165AWAwO2vF6hnC7TG6frq6wc7vW7VUJWeQw\nD4PMHt9fAJSbf+ai2mtPj/W1iLY53b4d6Ouz/XqbygiZhzAPg9QPX6uoZN6pt7AoFgNhkc0ChULQ\nI/vgQTsPUFgQUiV0epPZ4bcQHRwMZ1A7/Han9SCTMU0CMCHR1GS/nYaR4XcSITOBAoNUR1wEFGB1\nmXxcjsPwcDhaCahPBFVfn5mlnLAAgoxuQsiMoMAgyYnmNqgCmzbZ35/9LDz2nnuAEydMcHR2mnO5\nry+oFJvJBE7xNPplF4tWG8qnu5shtITMAn5ukWREfRWq5tweHgaOHgXGx4HW1mD8iRO27zSPvXuD\n69va7Ou/2giq6Bh/3//d02PPcL24nQ+DfS0ImRXUMEgyKvkqcjngyJFAaPhs3w6cOxeU3ujvBw4d\nMr+Ci16aKoLKN1f19loPbhcW62snQKD5FIv2e2wMWLMG+Mu/DHp1Z7MmwKhhEDIzVHXRbG1tbUpS\nplh0GRe2FYuqhUL4mNvyedXJSfsbdx6wa6P3V1Xt6bHrCgU7lsvZ+M5O23f3zOWCc5deqprNqu7c\nGT+X6LMIIQpgRBOusdQwSHKcGcpn1y7zV/jkcqZJDA7a35GR+OgpwExHLjfC74bnzFeHDgURT4CZ\nwJzj2mknbm4HDgDHjpk2sXMncNttwXX79tHhTchsSSpZFsJGDSNFKn3V+1tra/j4ypX2N5sNj1u2\nTPWNN4Lj2WxYE3HaQPS66DOdNuLmV0mLcff0xxNCVLU6DYOfXCQZrqKr60bnKr06urrMh+EyvDs7\ngePHg4Q5x7JlwE9/am1QnV9h+3YLf/XrPzU1Ve637XAO7GKxctLg5GS4bpTS4U3ITKFJiiTHLbaq\n5SGrUUfy44/bse3bwwv/K6+YsHD4uRHOsV7JfDU0FAgsF2F15IgJoPFxE1qPPhp+Xnu7mcQA1o0i\nZJZQYJBk+LWZDh+2vy0twMSEaQlxpcP7+4GzZ8PHN2wI77vcCEfUR+L6bW/ebP4Lx8CACa7hYRMW\n69aFhcW6dRbaOzYWCA0/iY8QUjUUGGR6VG3hdyYktyg7YXHVVXass9M0C/f170Jo83kTHm1ttr96\nNfCbv2n38Num3nuvOa27uqyvthNQmzYB119vmoTTEpx34vrrgY0bw1qJq0oL2DOXL6ewIKQGpCYw\nRGQZgMMAzis950uq2hMZcw2A+wF8v3ToPlW9tXRuK4BBAE0A7lLVP09rrmQaRGzRjfojAGDbNjMp\n5XJBPoXTGJ56KpxnsX27LfLLlgXmpVzOtIThYeDCC+26w4eBJ58EXn7ZnvfMM8DzzwMvvABs2RL4\nLA4cMCH1zW+GBcbgYGB6YjkQQmpHUu94tRsAAfBzpd9LAQwD2BgZcw2AB2OubQLwPQC/COAtAMYB\nXDndMxklVUOiEUhxUVGAakuL6i23qO7dG45EKhRsf+/e8H1dXkU0NyOXU+3oqBzl1NoafzyXKz/H\niChCEoP5ECVVmsurpd2lpS1piEoHgGdV9TlVfR3APQA+mMI0SRTVcNc8Zy6anASWRBTSZcvMLPXA\nA5aF7UfpTuv4AAARHUlEQVQidXfb/tmz4cikTCashTgGBsy0FEdLi2kyrqChw+V7jI8HZcwZEUVI\naqTqwxCRJgCjAN4B4HZVHY4ZtllEngZwDMCnVfUZAJcC+JE35nkAnRWesQPADgBYu3ZtDWffgLjy\nG4CZjNyC+6UvmTkoyk9/aov59u12bSYTLhtSqeyHankYbHe3JdfdfbcJIZ+JCSsxEhUAztHuHOOZ\nTCCIGBFFSO1JqorMZgOwAsA3ALw7cvxiBGar9wP4z9LvD8H8Fm7cJwDcNt1zaJKaBUkS81payo/9\n0R+F71EpsS7uOc505PYrmZ1WrlS9+ebK5qrJyfJnEEISgflgkooIpTMlgbE1cvyclsxWqvoVAEtF\npAWmbVzuDb2sdIykhd/nemioPEy2tbX8yx8A/vmfzQkdpzXEmYVcAqCvfQwMmHnp5Mn4uZ06ZVoO\nEDjKfbq7w8+hZkFIOiSVLNVuAFYBWFH6fT6ARwHcGBmzBkFf8Q4A/wVzli8B8ByAtyNwev/KdM+k\nhlEDKpXYWL26/Kvele7wNZKo1lDJAR09VihYYcE4TeaCC1Svuir8HPfbXUNHNyEzAvOk+OAlAP6u\n5MfIAPiiqj4oIjeVBNUdMNPTp0RkEsBrAD5ceoFJEdkJ4KuwiKnPq/k2SJqoln+979xpCXHR0uV7\n9lgy3J49QYnxqNYAVPYlRI9lMsB55wXJgPm8+TTWrLH99estl+PWW8NFB4GgzDk1C0LSJalkWQgb\nNYxZUCwGX+sbNpQX/gMs7NWFy/pFAv17RO9ZzfPdfbPZ8HOy2XB47myeQwgJgXmiYZCFyqZN9jXv\nh9Hu3Bk0QvK1Bz8pLvqFX80Xf7RBk8vMdlnitXoOIWTGOP/BoqC9vV1HXKE5Uj2qVssp6vAGgqJ/\nbnFWTWehVg0Lh2KRAoGQFBGRUVVtTzKWNROI4QRANKHOJcMNDYWjntISFkkirQghcwIFBgkyu4vF\n8rLl3d1mEsrn03UsO2ExOGjPKhaZtU3IPIM+jEZHNdwO1a9Im80GWdtRP0KtqZSfATACipB5AgUG\nCTubgXBJ8u7ucud2WvT2hn0jTmhQWBAyL6DTu5Hp7TXtwgmMOGdzWs5tQsi8oBqnNzWMRkXVCg36\nRQZ9du0KR0URQhoeCoxGpa/P/uZy4TDazk7b/JwLCg1CCBgl1Zg4R3dcvkVnZ1CEkM5mQogHNYxG\nxGkOqvFCg5oFISQGahiNxlRBDs48FU2eI4QQUGA0Fn7rVQA4cqR8TC5HUxQhJBaapBoFP0HPCYyj\nR+2vK2k+NGS/e3rmZo6EkHkNBUajEK0G63BFBd0YaheEkAowca+RcP/WlarBMkmPkIaDiXuknN5e\nS9SLsmkT8PjjJigoLAghU0CndyOgCrz8svkonJ+iq8vODQ9bVvci0jQJIelADaMR6Osz7WHDBuCJ\nJ4Lci44OYONGoLmZ2gUhZFqoYSx2/KzuN94In3v9dWD5cjNXEULINFBgLHZErEy563HhMzYGnD1L\ncxQhJBGpCQwRWSYiR0VkXESeEZG+mDEfE5GnReRbIvKYiLR6535QOj4mIgx9qoY4AXDVVfWfByFk\nUZGmD+NnAK5T1VdFZCmAfxORh1TVTy/+PoAtqnpaRG4AcCeATu/8tao6keIcFx9+jwsRC5vdvRu4\n777ysV1d9F8QQhKTmsBQS/B4tbS7tLRpZMxj3u4RAJelNZ/UieYwuP1Kx9Oag8vmBsw/cf/9wPi4\n7be2Br8B4NFHgdHRdOZCCFl0pBolJSJNAEYBvAPA7ao6PMXw3wHwkLevAL4uIgUAf6Oqd6Y301ni\nvupd32tV+6p/6ingPe8Jvvbd8RUrKjuaZyNgKmVzr14NrFkTCIuuLhMWY2PWgpWVaQkhCUjV6a2q\nBVXNwjSHDhF5d9w4EbkWJjD+wDv83tK1NwC4WUSurnDtDhEZEZGRkydP1vgNEuB/1a9fDxQKJhQG\nB4FnnrG/ruCfO37mTLyfIVoc0F1TTRSTLzQcL70UCItczuYwOsqeF4SQ6lDVumwA9gL4dMzxdQC+\nB+CXp7i2N+7a6NbW1qZzQqGgeuGFqrbE29baan+XLAkfz+dVi8Xw9cWibfm8jcnlwvtx17jrovuF\ngl3vP9Pf/Gvi7kkIaSgAjGjCdTzNKKlVIrKi9Pt8AL8G4P9FxqwFcB+AT6jqd73jF4rIRe43gPcB\n+HZac50VTht4xzvCx90X/eRk+HjU/OO0CnfO9aTIZEwTyOfjTUY9PWFtpFi0JLyLLw6yuScngZaW\n8HX+NdQsCCFVkKZJ6hIA3xCRpwE8AeBrqvqgiNwkIjeVxuwFsBLAX0XCZ1fDoqrGARwF8M+q+nCK\nc50Z/mJ/dazFzBzNPlGTkzNnVWpaVElYHDwYXFcsAm1tVq78xz+2Me7YRCnIrKMjMEf5cyCEkKQk\nVUUWwlY3k1TUhOTMUStXxpuBnEkpzsRUKATHp7o27rnZbHhsS0v8Pdats+e4a3t66vO/EyFk3oMq\nTFKsJVUtfp5DtC/2qVPl488/H9i3L+yMdo5md699+8JRTR0d1g3POckBC5E9ezb+uY4XXwT27Ck/\n/tRTQUlzRkQRQmYIBUZSnAnH71rnGg/FkcmYWei114KF3wkNF2Lr7vUP/xC+9rnnzOzkBIwTFk54\nOIERZcMGi9KKsnu3zZUlzAkhs4ANlKZD1aq9Oq1CS6Gu0a/4OFpagPPOAz75yfLQWFUTKGvWBH4G\nd83EhNV+Gh0NFnn3XF8TqQbXWY8CgxDiUU0DJRYfnIreXusVcfq0LdS7dtl25Eh4XC5X7twGgBde\nAH70o3Jh4ZzlmQzwqU+FzzlhsX17uDNeXH5FNmsahett4TM5GfTqXrOG+RaEkFlDk1QlnMnIhai6\ncNc4/vZvzfS0cmXYj/G2twHHjwNNTeX3dWatOEZG7JqensBvAViIrc9VV9k9Dh8uv4fL4AZMWPSV\n1X4khJCqoMCoRKUyGw739T40ZMJi2TITFrmclQhxpqY9e8KOZnffOKe1o60N2LYNePBBK9/h4p0O\nHAjGtLTY/t13B0KqowPo7LTj7t4DA2FNhRBCZggFxlS4xT1OYLgF2QmOp56y0iBOOBw/bsIizhQk\nYv4EX2C0tprPoq3Nkv6++10TRNlseNy6dXa9Sww8dcoisV57zRL33POHh60SLYUFIaRGUGBMhar5\nLHy6usJf+m6BjlambWqqHMLqHNg+4+N2bMsW+/3aayZEok2Ptmyx+y7x/uleey3s1HbRW/RZEEJq\nCKOkKuFHJXV2mrkHCAsLoHLpjiT3zefNfLV+fbjsOGDCYmQEWLo02X0LBWoThJCqqSZKihpGJUTM\nnJTPWx6EX2G2o8PMP8PD4dyIJELDv6+75sknw45xwATIJZeEj0Wd6j5tbWbSotAghKQEVxefqLbV\n02MawNmz5kc4etRMUhs32n5np5mCqg1Z7e0t75ERh5+f0dpaLiyyWQufdf26u7tZI4oQkhrUMBy9\nvZZv4fwAzn/R3ByOlhou9YByGgIwM1+B/4yoAz0ueurqq03r6OgArr8eeOABExJ79pjpqpKDnRBC\nagR9GIAt3Js2mTBwzmO3kHd2Ao8/buN8c0+xWJvFubcXePhhe87+/TaXOJ+GC5l1JUaKRdMoXPc+\n3+FOCCEJYab3TOjstL+uF4X7yu/sjDcb1apEeG+vCSQX2bR7d7g7ntM6jh4NX5fJmIbjssgpLAgh\nKUOTFBAORfXNQbmcLcrd3eFmRn5Np1pUf/Wvb242IeU0DsfwMPDWt4bHUkgQQuoIBcZ0xEU1RcuU\n15LeXnO2u2cDzKsghMwLKDCAcuezw+1HF2y/THkaxGWGE0LIHEMfhsNFP+Vy5lB2vgN3nIs4IaTB\noYYB2OK/dWvgN/B9Gs3NFA6EEAKG1YaJhqYyVJUQsshhWO1ModmJEEIqkprAEJFlInJURMZF5BkR\nKevgI8aQiDwrIk+LyHrv3FYR+Y/SuT9Ma56EEEKSkaaG8TMA16lqK4AsgK0isjEy5gYA7yxtOwD8\nNQCISBOA20vnrwTwERG5MsW5EkIImYbUBIYar5Z2l5a2qMPkgwD+vjT2CIAVInIJgA4Az6rqc6r6\nOoB7SmMJIYTMEan6MESkSUTGAJwA8DVVHY4MuRTAj7z950vHKh0nhBAyR6QqMFS1oKpZAJcB6BCR\nd9f6GSKyQ0RGRGTk5MmTtb49IYSQEnWJklLVMwC+AWBr5NQxAJd7+5eVjlU6HnfvO1W1XVXbV61a\nVbtJE0IICZFa4p6IrALwhqqeEZHzAfwagL+IDDsIYKeI3AOgE8BZVX1RRE4CeKeIvB0mKD4M4KPT\nPXN0dHRCRH5Y5VRbAExMO2pxwXduDPjOjcFs3/kXkg5MM9P7EgB/V4p4ygD4oqo+KCI3AYCq3gHg\nKwDeD+BZAD8B8Nulc5MishPAVwE0Afi8qj4z3QNVtWoVQ0RGkiatLBb4zo0B37kxqOc7pyYwVPVp\nAO+JOX6H91sB3Fzh+q/ABAohhJB5ADO9CSGEJIICA7hzricwB/CdGwO+c2NQt3deVMUHCSGEpAc1\nDEIIIYloGIExXTHDqQohLlQSvPPHSu/6LRF5TERa52KetSRp0UoR2SAikyLyoXrOr9YkeV8RuUZE\nxkpFQA/Ve461JsF/18tF5AGv8Olvz8U8a4mIfF5ETojItyucr8/6paqLfoOF5n4PwC8CeAuAcQBX\nRsa8H8BDAATARgDDcz3vOrzzZgDNpd83NMI7e+P+FRaF96G5nnfK/8YrAPw7gLWl/Z+f63nX4Z3/\nF4C/KP1eBeBlAG+Z67nP8r2vBrAewLcrnK/L+tUoGkaSYoaVCiEuVKZ9Z1V9TFVPl3aPwDLqFzJJ\ni1Z2AbgXVuNsIZPkfT8K4D5V/S8AUNVGeGcFcJGICICfgwmMyfpOs7ao6mHYe1SiLutXowiMJMUM\nF1vBw2rf53dgXygLmWnfWUQuBfDrKJXSX+Ak+Tf+ZQDNIvKIiIyKyG/VbXbpkOSdbwPwLgAvAPgW\ngLyqFuszvTmjLusXe3oTiMi1MIHx3rmeSx3YD+APVLUojdFRcQmANgD/A8D5AB4XkSOq+t25nVaq\nXA9gDMB1AH4JwNdE5FFVPTe301r4NIrASFLMMHHBwwVCovcRkXUA7gJwg6qeqtPc0iLJO7cDuKck\nLFoAvF9EJlX1n+ozxZqS5H2fB3BKVX8M4McichhAK4CFKjCSvPNvA/hzNeP+syLyfQD/HcDR+kxx\nTqjL+tUoJqknUCpmKCJvgRUzPBgZcxDAb5WiDTaiVAix3hOtIdO+s4isBXAfgE8ski/Oad9ZVd+u\nqleo6hUAvgTg9xaosACS/Xd9P4D3isgSEbkAVuTzO3WeZy1J8s7/BdOoICKrAfw3AM/VdZb1py7r\nV0NoGFqhmGGSQogLlYTvvBfASgB/VfrintQFXLgt4TsvGpK8r6p+R0QeBvA0gCKAu1Q1NjRzIZDw\n3/hPAPxfEfkWLGroD1R1QVewFZF/BHANgBYReR5AD6yLaV3XL2Z6E0IISUSjmKQIIYTMEgoMQggh\niaDAIIQQkggKDEIIIYmgwCCEEJIICgxCCCGJoMAghBCSCAoMQlKi1HPjaRFZJiIXlnozvHuu50XI\nTGHiHiEpIiJ/CmAZrPDf86r6Z3M8JUJmDAUGISlSqnf0BICfAtisqoU5nhIhM4YmKULSZSWsic9F\nME2DkAULNQxCUkREDsK6wr0dwCWqunOOp0TIjGmIarWEzAWl7nZvqOrdItIE4DERuU5V/3Wu50bI\nTKCGQQghJBH0YRBCCEkEBQYhhJBEUGAQQghJBAUGIYSQRFBgEEIISQQFBiGEkERQYBBCCEkEBQYh\nhJBE/H+upWAN1MTyxQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x5aff978>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "#导入数据并且可视化一下\n",
    "x,y = load_data(\"regress/ex0.txt\")\n",
    "print x.shape,y.shape\n",
    "print x[0],y[0]\n",
    "\n",
    "\n",
    "plt.scatter(x[:,1],y[:,0],marker='x',color = 'r')\n",
    "plt.xlabel('x')\n",
    "plt.ylabel('y')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 3.00774324]\n [ 1.69532264]]\n"
     ]
    }
   ],
   "source": [
    "#简单的线性回归，使用求导公式就可以求得w的最优值\n",
    "\n",
    "def normalEquation(X_train,y_train):\n",
    "    w = np.zeros((X_train.shape[0],1))\n",
    "    #这里用的伪逆,所以不用判断矩阵的逆存不存在\n",
    "    w = ((np.linalg.pinv(X_train.T.dot(X_train))).dot(X_train.T)).dot(y_train)\n",
    "    return w\n",
    "w = normalEquation(x,y)\n",
    "print w\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nQL0ZrAOeQx0AAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7bf2ac8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#现在可视化一下求得w的效果\n",
    "plt.scatter(x[:,1],y[:,0],marker='.',color = 'r')\n",
    "plt.plot(x[:,1],x.dot(w),color = \"blue\",linestyle = \"-\")\n",
    "plt.xlabel('x')\n",
    "plt.ylabel('y')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(200L, 1L)\n(200L, 1L)\n[[ 1.          0.98647356]\n [ 0.98647356  1.        ]]\n"
     ]
    }
   ],
   "source": [
    "#使用相关系数函数，评价拟合的好坏,得到两两相关的矩阵\n",
    "yHat = x.dot(w)\n",
    "print yHat.shape\n",
    "print y.shape\n",
    "print np.corrcoef(yHat.ravel(),y.ravel())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "should be 3.12204471\n[ 3.12204471]\nshould be 3.20175729\n[ 3.20175729]\n"
     ]
    }
   ],
   "source": [
    "#线性回归容易欠拟合，所以实现局部加权线性回归————给待预测点附近的每个点赋予一定的权重\n",
    "#局部加权线性回归：运算复杂,计算量大；因为对每个点的预测都需要用到整个数据集合\n",
    "\n",
    "#对单个点，用整个数据集合赋权重，求得预测值\n",
    "def lwlr(testpoint,x,y,k = 1.0):\n",
    "    m,n = x.shape\n",
    "    w = np.eye((m)) #对角元素 = 1的对角矩阵\n",
    "    weight = np.zeros((n,1))\n",
    "    #求得测试点关于其他的数据点的权重，离得越近，权重越大\n",
    "    for i in xrange(m):\n",
    "        d = testpoint - x[i,:]\n",
    "        w[i,i] = np.exp(d.dot(d.T) / (-2.0*k**2))\n",
    "    XTWX = x.T.dot(w).dot(x)\n",
    "    weight = ((np.linalg.pinv(XTWX).dot(x.T)).dot(w)).dot(y)\n",
    "    return testpoint.dot(weight)\n",
    "#对整个测试点，进行预测\n",
    "def lwlrTest(testArr,x,y,k = 1.0):\n",
    "    m = x.shape[0]\n",
    "    y_pred = np.zeros((m,1))\n",
    "    for i in xrange(m):\n",
    "        y_pred[i] = lwlr(testArr[i],x,y,k)\n",
    "    return y_pred\n",
    "\n",
    "#测试一下\n",
    "print \"should be 3.12204471\"\n",
    "print lwlr(x[0],x,y,k=1)\n",
    "print \"should be 3.20175729\"\n",
    "print lwlr(x[0],x,y,k=0.001)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(200L, 1L) (200L, 1L) (200L, 1L)\n"
     ]
    }
   ],
   "source": [
    "y1 = lwlrTest(x,x,y,k = 1)\n",
    "y2 = lwlrTest(x,x,y,k = 0.01)\n",
    "y3 = lwlrTest(x,x,y,k = 0.003)\n",
    "\n",
    "print y1.shape,y2.shape,y3.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7d54dd8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#k = 1，权重很大，就等于将所有的数据视为等权重\n",
    "plt.scatter(x[:,1],y[:,0],marker='.',color = 'r')\n",
    "plt.plot(x[:,1],y1.ravel(),color = \"blue\",linestyle = \"-\")\n",
    "plt.xlabel('x')\n",
    "plt.ylabel('y')\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(200L,)\n(200L, 2L)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x9431b70>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#k=0.01拟合的挺好\n",
    "#为了绘制曲线图，需要将数据点排序\n",
    "srtIndex = x[:,1].argsort(0)\n",
    "print srtIndex.shape\n",
    "x_sort = x[srtIndex]\n",
    "print x_sort.shape\n",
    "\n",
    "\n",
    "plt.scatter(x[:,1],y[:,0],marker='x',color = 'r')\n",
    "plt.plot(x_sort[:,1],y2[srtIndex],color=\"black\")\n",
    "#plt.scatter(x[:,1],y2,color = \"blue\",marker=\".\") #也可以用散点表示，不用排序\n",
    "plt.xlabel('x')\n",
    "plt.ylabel('y')\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x946a4a8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# k = 0.003有点过拟合了\n",
    "plt.scatter(x[:,1],y[:,0],marker='x',color = 'r')\n",
    "plt.plot(x_sort[:,1],y3[srtIndex],color=\"black\")\n",
    "#plt.scatter(x[:,1],y3,color = \"blue\",marker=\".\")\n",
    "plt.xlabel('x')\n",
    "plt.ylabel('y')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "#当数据的特征非常的多，n>m时，则输入数据X不是满秩矩阵，非满秩矩阵求逆会有问题\n",
    "#岭回归 == 加入了正则化,缩减权重系数，也就是减少特征值数量\n",
    "\n",
    "#岭回归公式求解\n",
    "def ridgeRegress(x,y,lammda = 0.2):\n",
    "    m,n = x.shape\n",
    "    I = np.eye((n))\n",
    "    temp = x.T.dot(x) + lammda * I\n",
    "    w = np.linalg.pinv(temp).dot(x.T).dot(y)    \n",
    "    return w\n",
    "\n",
    "\n",
    "def test(x,y):\n",
    "    ymean = np.mean(y,axis=0)\n",
    "    y_nor = y - ymean #对y也进行0均值化\n",
    "    xmean = np.mean(x,axis=0)  #对x进行0均值化，方差标准化\n",
    "    xvar = np.var(x,axis=0)\n",
    "    x_nor = (x - xmean) / xvar\n",
    "    num = 30\n",
    "    ws = np.zeros((num,x.shape[1]))\n",
    "    for i in xrange(num):  #选择30个lamda计算\n",
    "        w = ridgeRegress(x_nor,y_nor,np.exp(i-10)) #注意这里用的lamda是指数级变化的\n",
    "        ws[i,:] = w.ravel().T\n",
    "    return ws\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "#load data from file导入txt数据\n",
    "def load_data1(filename):\n",
    "    dataset = []\n",
    "    label = []\n",
    "    file = open(filename)\n",
    "    for line in file.readlines():\n",
    "        lineArr = line.strip().split('\\t')\n",
    "        m = len(lineArr)\n",
    "        dataset.append(lineArr[0:m-1])\n",
    "        label.append(lineArr[-1])    \n",
    "    return np.array(dataset,dtype=np.float64),\\\n",
    "           np.array(label,dtype=np.float64).reshape(-1,1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(4177L, 8L) (4177L, 1L)\n"
     ]
    }
   ],
   "source": [
    "xx,yy = load_data1(\"regress/abalone.txt\")\n",
    "print xx.shape,yy.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(30L, 8L)\n"
     ]
    }
   ],
   "source": [
    "ws = test(xx,yy)\n",
    "print ws.shape "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x93e5a58>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot([i-10 for i in xrange(30)],ws)\n",
    "plt.xlabel(\"log(lamda)\")\n",
    "plt.ylabel(\"w1-8\")\n",
    "plt.show()\n",
    "#可以看出，当lamda很小时候，各个权重参数跟普通的回归一样，有各自的值，\n",
    "#当lamda很大时，权重参数 缩减为0，因为进行了惩罚，让有些参数不起作用\n",
    "#可以在中间某处找到合适的参数lamda"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "#向前逐步回归——————贪心算法：从初始值，每次更新（增大一点/减少一点），看看哪个有利于减少误差，就选择哪个更新，\n",
    "\n",
    "#这是一个0均值化，方差为1的特征归一化过程\n",
    "def normalFeature(x):\n",
    "    m,n = x.shape\n",
    "    mean = np.mean(x,axis=0)\n",
    "    var = np.var(x,axis=0)\n",
    "    x_nor = (x - mean) / var\n",
    "    return x_nor,mean,var\n",
    "\n",
    "#求平方误差\n",
    "def rssError(y,yhat):\n",
    "    return np.sum((y-yhat)**2)\n",
    "\n",
    "#前向逐步回归\n",
    "def stageWise(x,y,learn_rate = 0.005,iters = 1000):\n",
    "    m,n = x.shape\n",
    "    y_mean = np.mean(y,axis=0)\n",
    "    y_nor = y - y_mean\n",
    "    x_nor,x_mean,x_var = normalFeature(x)\n",
    "    \n",
    "    ws = np.zeros((iters,n)) #用来记录w的迭代变化\n",
    "    w = np.zeros((n,1)) #实际的权重w\n",
    "    w_update = w.copy() #用于w的更新\n",
    "    w_best = w.copy() #存储最好的w\n",
    "    \n",
    "    for i in xrange(iters):\n",
    "        if (i%100) ==0:\n",
    "            print w.ravel()\n",
    "        lowestError = np.inf #最小的误差\n",
    "        for j in xrange(n): #每次对一个特征（权重系数w0-w8）进行改变，看看误差变化\n",
    "            for update_size in [-1,1]:\n",
    "                w_update = w.copy()\n",
    "                w_update[j] += learn_rate * update_size #更新\n",
    "                yhat = x_nor.dot(w_update.reshape(-1,1)) \n",
    "                error = rssError(y_nor,yhat)\n",
    "                if error < lowestError:\n",
    "                    lowestError = error\n",
    "                    w_best = w_update\n",
    "        w = w_best.copy()\n",
    "        ws[i,:] = w.T\n",
    "    return ws\n",
    "                \n",
    " "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 0.  0.  0.  0.  0.  0.  0.  0.]\n[ 0.     0.     0.01   0.045  0.    -0.18   0.     0.225]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 0.     0.     0.085  0.03   0.    -0.47   0.     0.345]\n[ 0.025  0.     0.1    0.025  0.26  -0.62  -0.005  0.365]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 0.035  0.     0.105  0.025  0.615 -0.695 -0.025  0.33 ]\n[ 0.04   0.     0.105  0.025  0.98  -0.77  -0.045  0.295]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 0.045  0.     0.105  0.025  1.295 -0.83  -0.06   0.26 ]\n[ 0.045  0.     0.105  0.025  1.295 -0.83  -0.06   0.26 ]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 0.045  0.     0.105  0.025  1.295 -0.83  -0.06   0.26 ]\n[ 0.045  0.     0.105  0.025  1.295 -0.83  -0.06   0.26 ]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(1000L, 8L)\n"
     ]
    }
   ],
   "source": [
    "ws = stageWise(xx,yy,learn_rate=0.005,iters=1000)\n",
    "print ws.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x9e804a8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(ws)\n",
    "plt.xlabel(\"itres\")\n",
    "plt.ylabel(\"w1-8\")\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [],
   "source": [
    "#向前逐步回归，可以从上图看出，那些变化很小的，一直在0附近的权重参数（对应特征），说明他们对误差不产生影响\n",
    "#这可以帮助我们找出重要的特征\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
